#ifndef _H_BASEEFFECT
#define _H_BASEEFFECT

#include <string>
#include <iostream>

class baseToken;
class baseBoard;
class basePlayer;
class baseDeck;
class baseCard;

class baseEffect
{
    private:
        std::string name;
        std::string description;
        baseCard* hostCard;

    public:

        typedef enum effectType { board, player, deck, trash};

        // Constructor
        baseEffect(std::string aName, std::string aDescription);

        // Accessor
        std::string getName();
        std::string getDescription();
        baseCard* getHostCard();
        void setHostCard(baseCard* aHostCard);

        // Print
        std::string toString();
        void toString(std::ostream &out);
        void toString(std::string &str);

        virtual effectType getType() = 0;
        virtual void doEffect(void* target) = 0;
};

#endif //_H_BASEEFFECT